<?php
#if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
#define('DOMAIN', 'http://'.$_SERVER['HTTP_HOST'].'/', true);

define( "LOG__NONE",    0 );
define( "LOG__ERROR",   1 );
define( "LOG__VERBOSE", 2 );
define( "LOG__DEBUG",   3 );

define( "STATUS_OK",       0 );
define( "STATUS_WARNING",  1 );
define( "STATUS_CRITICAL", 2 );
define( "STATUS_UNKNOWN",  3 );

#Sortie possible 

$criticals = "";
$warnings  = "";
$unknowns  = "";
$ncommand="";
$ini_array = array();
$path = realpath(dirname(__FILE__));
if (file_exists($path.'/ws.ini')) {
	$ini_array = parse_ini_file($path.'/ws.ini', true);
}
#Configuration des options 
$cmdargs = array(
    'config_version'     => '1.0',              
    'log_level'          => LOG__NONE,
	'file_log'			=> $path.'/'.$ini_array['vandenban']['file_log'],
);
$log_level = LOG__NONE;
#date et heure de commande
#$cdate=$date->toFormat(JText::_('%Y-%m-%d %H:%M:%S'));
# Chargement du fichier ini

#Inclure les librairies joomla
/*if(file_exists($ini_array['General']['joomla_path'].'configuration.php')) {
	require_once($ini_array['General']['joomla_path'].'configuration.php');
}
if (file_exists($ini_array['General']['joomla_path'] . 'administrator/components/com_virtuemart/compat.joomla1.5.php')) {
	define( '_VALID_MOS', 1 );
	define( '_JEXEC', 1 );
	include_once($ini_array['General']['joomla_path'] . 'administrator/components/com_virtuemart/compat.joomla1.5.php' );	
}

// On inclue les constantes
require_once ( $ini_array['General']['joomla_path'].'includes/defines.php' );
// On inclue le framework
require_once ( $ini_array['General']['joomla_path'].'/includes/framework.php' );
// On inclue la fameuse class JFactory
require($ini_array['General']['joomla_path'].'libraries/joomla/factory.php');

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$mail =& JFactory::getMailer();
$config =& JFactory::getConfig();

$mail->setSender($ini_array['vandenban']['from_contact_email']);
$mail->addRecipient( $ini_array['vandenban']['to_contact_email'] );
*/
#Argument 1 -> produit et quantité
#Argument 2 -> action du webservice
#Argument 3 -> numero commande et adresse de commande
$log=$path.'/'.$ini_array['vandenban']['file_log'];

#Options du client SOAP
$options = array(
			"login" => $ini_array['vandenban']['auth_users'],
			"password" => $ini_array['vandenban']['auth_pass'],
			"uri" => $ini_array['vandenban']['soap_namespace'],
			"location" => $ini_array['vandenban']['soap_location'] ,
			"authentication" => SOAP_AUTHENTICATION_BASIC,
			"trace" => true,
			"exceptions" => 1,
			"cache_wsdl" => WSDL_CACHE_NONE,

		);
#Declaration du client SOAP
$client = new SoapClient($ini_array['vandenban']['soap'], $options);		
$client->__setLocation($ini_array['vandenban']['soap_location']);		
$inquiry_constuct = array();

_log("Service SOAP 	=> ".$ini_array['vandenban']['soap']."", LOG__VERBOSE );
_log("namespace 	=> ".$ini_array['vandenban']['soap_namespace']."", LOG__VERBOSE );

$cmd = explode(",", $argv[1]); 
#Mise dans l ordre  des arguments
sort($cmd);
_log( "Nombre d'arguments : ".(count($cmd))."", LOG__VERBOSE );

# Decoupage par arguments
for ($idx=0 ; $idx<count($cmd) ; $idx++){
	$cmd_filtre[] = explode(".", $cmd[$idx] );	
}
#_log( var_dump($cmd_filtre), LOG__VERBOSE );

switch ($argv[2]) {
    case "inquiry":
		#Construction du tableau pour simulation de commande
		#Quantite d'article commander
			if (count($cmd) > 1){
				for ($idx=0 ; $idx<count($cmd) ; $idx++){
					#$inquiry_constuct['LineID']= ($idx+1) ;
					#var_dump($inquiry_constuct);
					$inquiry_constuct['LineID'][$idx]= Array
														(
															'LineID' => $idx+1,
															'OrderedArticle' => Array
																(
																	'ArticleIdentification' => Array
																		(
																			'EANUCCArticleID' => $cmd_filtre[$idx]['1'],
																		),
																	'RequestedDeliveryDate' => date("Y-m-d"),
																	'RequestedQuantity' => Array
																		(
																			'QuantityValue' => $cmd_filtre[$idx]['2'],
																		)
																)
														) ;
				}
				# concatenation du tableau
				$i = 0;
				while (isset($inquiry_constuct['LineID'][$i])){
					$sourceArray[] = $inquiry_constuct['LineID'][$i];
					unset($inquiry_constuct['LineID'][$i]);
					$i++;
				}			
			}else{
				#$inquiry_constuct['LineID'] = Array
				$sourceArray[] = Array
														(
															'LineID' => $idx+1,
															'OrderedArticle' => Array
																(
																	'ArticleIdentification' => Array
																		(
																			'EANUCCArticleID' => $cmd_filtre['0']['1'],
																		),
																	'RequestedDeliveryDate' => date("Y-m-d"),
																	'RequestedQuantity' => Array
																		(
																			'QuantityValue' => $cmd_filtre['0']['2'],
																		)
																)
														) ;
				
			
			
			}			
			$inquiry_A2=Array
						(
							'uri'=>$ini_array['vandenban']['soap_namespace'],
							'inquiry_A2'=>Array(
								'DocumentID' => 'A2',
								'Variant' => '5',
								'TransportPriority' => 'REPL',
								'Campaign' => '100',
								'SubstitutionIndicator' =>'Y',
								'CustomerReference' => Array
									(
										'DocumentID' => '00000010'
									),
								'BuyerParty' => Array
									(
										'PartyID' => '731820',
										'AgencyCode' => '91'
									),
								'OrderingParty' => Array
									(
										'PartyID' => '',
										'AgencyCode' => '91'
									),	
									'OrderLine'=> $sourceArray									
								)
						);
			_log( var_dump($inquiry_A2), LOG__VERBOSE );
					$InquiryRequest= array
						( 'inquiry_A2'=> $inquiry_A2);
					try {
						$result = $client->__soapCall('InquiryRequest',$InquiryRequest);		
					}catch (SoapFault $ex) {
						$criticals .= $ex->getMessage() ;
						$criticals .= $ex->getPrevious() ;
						$criticals .= $ex->getCode() ;
						$criticals .= $ex->getFile () ;
						$criticals .= $ex->getTraceAsString() ;
						$criticals .= $ex->__toString() ;
						_log('SOAP Fault: ' . $ex->getMessage(), LOG__VERBOSE );						
						_log('SOAP Fault: ' . $ex->getPrevious(), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->getCode(), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->getFile (), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->getLine (), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->getTrace(), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->getTraceAsString(), LOG__VERBOSE );		
						_log('SOAP Fault: ' . $ex->__toString(), LOG__VERBOSE );		
					}	 
		# Reponse du flux SOAP inquiry vandenban
		_log( "Request : \n" .$client->__getLastRequest(), LOG__ERROR );
		_log( "Request : \n" .$client->__getLastRequest(), LOG__VERBOSE );	
		_log( "Response : \n" . $client->__getLastResponse(), LOG__ERROR );	
		_log( "Code Erreur : ".$result->quote_A2->ErrorHead->ErrorCode, LOG__VERBOSE );	
			if ($result->quote_A2->ErrorHead->ErrorCode == 0){
				setStatus( STATUS_OK );
				#var_dump($result);
				if (count($cmd) > 1){
					for ($idx=0 ; $idx<count($cmd) ; $idx++){
						# mise en forme de la quantité
						echo $idx."->".$result->quote_A2->OrderLine[$idx]->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue."\n";
						$quantity = explode(".",$result->quote_A2->OrderLine[$idx]->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue); 
						if ($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 0){
							#Article non disponible immediatement date indetermine 
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') n\'est pas disponible immediatement dans la quantité demandé ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais  devez réduire la quantité dans votre panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 2){
							#L article n'est pas disponible dans la quantite demande
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') Dépasse la quantité en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité du panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 3){
							#L article n est pas disponible
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') n\'est plus disponible  en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');
						}			
					}
				}else{
						echo $idx."->".$result->quote_A2->OrderLine->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue."\n";
						$quantity = explode(".",$result->quote_A2->OrderLine->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue); 
						if ($result->quote_A2->OrderLine->OrderedArticle->Availability == 0){
							#Article non disponible immediatement date indetermine 
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') n\'est pas disponible immediatement dans la quantité demandé ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité dans votre panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine->OrderedArticle->Availability == 2){
							#L article n'est pas disponible dans la quantite demande
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') Dépasse la quantité en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité de panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine->OrderedArticle->Availability == 3){
							#L article n est pas disponible
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') n\'est plus disponible  en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');
						}
		
				}				
			}elseif( $result->quote_A2->ErrorHead->ErrorCode == 1){
				setStatus( STATUS_CRITICAL );
				if (count($cmd) > 1){
					for ($idx=0 ; $idx<count($cmd) ; $idx++){
						# mise en forme de la quantité
						echo $idx."---->".$result->quote_A2->OrderLine[$idx]->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue."\n";
						$quantity = explode(".",$result->quote_A2->OrderLine[$idx]->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue); 
						if ($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 0){
							#Article non disponible immediatement date indetermine 
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') n\'est pas disponible immediatement dans la quantité demandé ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais  devez réduire la quantité dans votre panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 2){
							#L article n'est pas disponible dans la quantite demande
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') Dépasse la quantité en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité de panier pour ce produit.');
						}elseif($result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability == 3){
							#L article n est pas disponible
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine[$idx]->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre[$idx]['2'].') n\'est plus disponible  en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');
						}elseif( (!$result->quote_A2->OrderLine[$idx]->OrderedArticle->Availability) && (preg_match("#missing#", $result->quote_A2->ErrorHead->ErrorText) )){
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('Le produit '.$cmd_filtre[$idx]['1'].' n\'est plus disponible , Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');						
						}			
					}
				}elseif(count($cmd) == 1){						
						echo $idx."->".$result->quote_A2->OrderLine->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue."\n";
						$quantity = explode(".",$result->quote_A2->OrderLine->OrderedArticle->ScheduleDetails->AvailableQuantity->QuantityValue); 
						if ($result->quote_A2->OrderLine->OrderedArticle->Availability){
							if ($result->quote_A2->OrderLine->OrderedArticle->Availability == 0){
								#Article non disponible immediatement date indetermine 
								setStatus( STATUS_WARNING );
								$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') n\'est pas disponible immediatement dans la quantité demandé ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité dans votre panier pour ce produit.');
							}elseif($result->quote_A2->OrderLine->OrderedArticle->Availability == 2){
								#L article n'est pas disponible dans la quantite demande
								setStatus( STATUS_WARNING );
								$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') Dépasse la quantité en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, mais vous devez réduire la quantité de panier pour ce produit.');
							}elseif($result->quote_A2->OrderLine->OrderedArticle->Availability == 3){
								#L article n est pas disponible
								setStatus( STATUS_WARNING );
								$warnings .= utf8_encode('La quantité de produit "'.$result->quote_A2->OrderLine->OrderedArticle->ArticleIdentification->EANUCCArticleID.'" dans votre panier ('.$cmd_filtre['0']['2'].') n\'est plus disponible  en stock ('.$quantity[0].') Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');
							}elseif( (!$result->quote_A2->OrderLine->OrderedArticle->Availability) && (preg_match("#missing#", $result->quote_A2->ErrorHead->ErrorText) )){
								setStatus( STATUS_WARNING );
								$warnings .= utf8_encode('Le produit n\'est plus disponible , Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');						
							}
						}else{
							setStatus( STATUS_WARNING );
							$warnings .= utf8_encode('Le produit '.$cmd_filtre['0']['1'].' n\'est plus disponible , Nous sommes désolés pour ce désagrément, merci de supprimer cet article de votre panier.');
						}
				}		
				#$criticals .= utf8_encode('SAOP ERROR 1: '.$result->quote_A2->ErrorHead->ErrorText);
				
			}elseif( $result->quote_A2->ErrorHead->ErrorCode != 0) {
				setStatus( STATUS_CRITICAL );
				$criticals .= utf8_encode('SAOP ERROR not00: '.$result->quote_A2->ErrorHead->ErrorText);
			}else{
				setStatus( STATUS_CRITICAL );
				$criticals .= utf8_encode('SAOP ERROR not01: '.$result->quote_A2->ErrorHead->ErrorText);
			}
		
    break;
    case "order":  
		#Recuperation du numero de commande et adresse
		if($argv[3]){
		 $cmd_adress = explode(",", $argv[3]); 
		}
		$ncommand=$cmd_adress[0];
		#_log( var_dump($cmd_adress), LOG__VERBOSE );
		#Construction du tableau pour commande		
		for ($idx=0 ; $idx<count($cmd) ; $idx++){
			#$inquiry_constuct['LineID']= ($idx+1) ;
			#var_dump($inquiry_constuct);
			$inquiry_constuct['LineID'][$idx]= Array
												(
													'LineID' => $idx+1,
													'OrderedArticle' => Array
														(
															'ArticleIdentification' => Array
																(
																	'EANUCCArticleID' => $cmd_filtre[$idx]['1'],
																),
															'RequestedDeliveryDate' => date("Y-m-d"),
															'RequestedQuantity' => Array
																(
																	'QuantityValue' => $cmd_filtre[$idx]['2'],
																)
														)
												) ;
		}	
		# concatenation du tableau
		$i = 0;
        while (isset($inquiry_constuct['LineID'][$i])){
            $sourceArray[] = $inquiry_constuct['LineID'][$i];
            unset($inquiry_constuct['LineID'][$i]);
            $i++;
        }
		$uft8_adress =  utf8_encode('|'.$cmd_adress[1].'|'.$cmd_adress[2].'|'.$cmd_adress[3].'|'.$cmd_adress[4].'|'.$cmd_adress[5].'|'.$cmd_adress[6].'|'.$cmd_adress[7].'|');	
		$order_A2=Array
			(
				'uri'=>$ini_array['vandenban']['soap_namespace'],
				'order_A2'=>Array(
				'DocumentID' => 'A2',
				'Variant' => '5',
				'EarliestDeliveryDate' => date("Y-m-d"),
				'TransportPriority' => 'REPL',
				'Campaign' => '100',
				'CustomerReference' => Array
					(
						'DocumentID' => $cmd_adress[0]
					),
				'BuyerParty' => Array
					(
						'PartyID' => '731820',
						'AgencyCode' => '91'
					),
				'OrderingParty' => Array
					(
						'PartyID' => $uft8_adress,
						'AgencyCode' => '91'
					),
				'OrderLine'=> $sourceArray
				)
			);

		$OrderRequest= array
		( 'order_A2'=> $order_A2);
		try {
			$result = $client->__soapCall('OrderRequest',$OrderRequest);//$client->OrderRequest(
		}catch (SoapFault $ex) {
				$criticals .= $ex->getMessage() ;
				$criticals .= $ex->getPrevious() ;
				$criticals .= $ex->getCode() ;
				$criticals .= $ex->getFile () ;
				$criticals .= $ex->getTraceAsString() ;
				$criticals .= $ex->__toString() ;
				
				//var_dump($ex->faultcode, $ex->faultstring, $ex->faultactor, $ex->detail, $ex->_name, $ex->headerfault);
				_log('- Request Header : ' . $client->__getLastRequestHeaders(), LOG__VERBOSE );	
				_log($client->__getLastRequest(), LOG__VERBOSE );	
				_log('SOAP Fault Message: ' . $ex->getMessage() , LOG__VERBOSE );	
				_log('SOAP Fault Previos: ' . $ex->getPrevious() , LOG__VERBOSE );	
				_log('SOAP Fault Code : ' . $ex->getCode() , LOG__VERBOSE );	
				_log('SOAP Fault File: ' . $ex->getFile () , LOG__VERBOSE );	
				_log('SOAP Fault Line: ' . $ex->getFile (), LOG__VERBOSE );	
				_log('SOAP Fault Trace: ' . $ex->getFile () , LOG__VERBOSE );	
				_log('SOAP Fault Trace as string: ' . $ex->getTraceAsString() , LOG__VERBOSE );	
				_log('SOAP Fault To String : ' . $ex->__toString(), LOG__VERBOSE );
		}
		# Reponse du flux SOAP inquiry vandenban
		_log( "Request : \n" .$client->__getLastRequest(), LOG__VERBOSE );	
		_log( "Response : \n" . $client->__getLastResponse(), LOG__ERROR );	
		_log( "Code Erreur : ".$result->order_response_A2->ErrorHead->ErrorCode, LOG__VERBOSE );	
		if ($result->order_response_A2->ErrorHead->ErrorCode == 0){
			setStatus( STATUS_OK );
		}elseif( $result->order_response_A2->ErrorHead->ErrorCode == 1){
			setStatus( STATUS_CRITICAL );
			$criticals .= utf8_encode("Problème lors de la commande : l\'article n'est plus disponible ");
			$criticals .= utf8_encode($result->order_response_A2->ErrorHead->ErrorText);
		}elseif( $result->order_response_A2->ErrorHead->ErrorCode != 0) {
			setStatus( STATUS_CRITICAL );
			$criticals .= utf8_encode("Problème lors de la commande :  ");
			$criticals .= utf8_encode($result->order_response_A2->ErrorHead->ErrorText);
		}else{
			setStatus( STATUS_CRITICAL );
			$criticals .= utf8_encode("Problème lors de la commande :  ");
			$criticals .= utf8_encode($result->order_response_A2->ErrorHead->ErrorText);
		}
    break;
	default:
			$unknowns .= "Erreur pendant la commande";
			setStatus( STATUS_UNKNOWN );
	break;	
        
}
#Code retour du  SOAP service

if( $status == STATUS_OK ){	
    $msg = "\nOK|OK|AUTO|".$ini_array['vandenban']['name'].":".$ncommand."\n";
	#$mail->setSubject( "Commande -> ".$cmd_adress[0] );
	#$mail->setBody( $msg );
	#mail_utf8($ini_array['vandenban']['to_contact_email'], $ini_array['vandenban']['to_contact_email'], $ini_array['vandenban']['from_contact_email'],"Commande -> ".$cmd_adress[0] , $msg);
}else{	
    $msg = "\nWARNING|{$criticals}{$warnings}{$unknowns}|AUTO|".$ini_array['vandenban']['name'].":".$ncommand."\n";
	#$mail->setSubject( "Commande -> ".$cmd_adress[0] );
	#$mail->setBody( $msg );
	#mail_utf8($ini_array['vandenban']['to_contact_email'], $ini_array['vandenban']['to_contact_email'], $ini_array['vandenban']['from_contact_email'],"Commande -> ".$cmd_adress[0] , $msg);
}

#$mail->Send();
#$mail->addAttachment($attachment) ;
/*if ($mail->Send()) {
  print($log.= "Mail sent successfully.");
} else {
  print($log.="An error occurred.  Mail was not sent.");
}*/ 

#echo $client->__getLastResponse();
echo $msg;
exit( $status );


function _log( $log, $level )
{
    global $cmdargs;
    if( $level == LOG__ERROR )
        fwrite( STDERR, "$log\n" );
    else if( $level <= $cmdargs['log_level'] )
        print( $log . "\n" );
}			

function setStatus( $new_status )
{
    global $status;
    if( $new_status > $status )
        $status = $new_status;
}			

function mail_utf8($to, $from_user, $from_email,$subject, $message)
{
      $from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
      $subject = "=?UTF-8?B?".base64_encode($subject)."?=";

      $headers = "From: $from_user <$from_email>\r\n".
               "MIME-Version: 1.0" . "\r\n" .
               "Content-type: text/html; charset=UTF-8" . "\r\n";

     return mail($to, $subject, $message, $headers);
   }



?>